package overall

import (
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	. "go_tempate/common/function"
	"time"
)

// 日志中间件
func GinLogger() gin.HandlerFunc {
	// 需要记录的是每次客户端访问时的上下文信息，所以此处返回一个匿名函数，在客户端请求时，触发中间件的时候，自动执行这个匿名函数
	return func(c *gin.Context) {
		//请求开始时间
		start := time.Now()

		//当前的请求路径
		path := c.Request.URL.Path

		//请求内容
		query := c.Request.URL.RawQuery

		//执行后续请求
		c.Next()

		//计算请求一共的耗时间
		cost := time.Since(start)

		// 记录日志
		Logger.Info(path,
			zap.Int("status", c.Writer.Status()),
			zap.String("method", c.Request.Method),
			zap.String("path", path),
			zap.String("query", query),
			zap.String("ip", c.ClientIP()),
			zap.String("user-agent", c.Request.UserAgent()),
			zap.String("errors", c.Errors.ByType(gin.ErrorTypePrivate).String()),
			zap.Duration("cost timer", cost),
		)
	}
}
